1 using System.Collections;
2 using
System.Collections.Generic;
3 using
UnityEngine;
4
5 public
class Rules : MonoBehaviour {
6
7     
public static bool IsAlly(Piece piece1, Piece piece2) {
8         GCPlayer p1 = GameManager.Instance.P1;
9         
if (p1.Has(piece1) && p1.Has(piece2)) return true;
10         
11         GCPlayer p2 = GameManager.Instance.P2;
12         
if (p2.Has(piece1) && p2.Has(piece2)) return true;
13
14         
return false;
15     }
16
17     
public static bool IsEnemy(Piece piece1, Piece piece2) {
18         GCPlayer p1 = GameManager.Instance.P1;
19         
if (p1.Has(piece1) && !p1.Has(piece2)) return true;
20         
if (p1.Has(piece2) && !p1.Has(piece1)) return true;
21         
return false;
22     }
23
24     
public static bool CheckKing(GCPlayer player, Node checkedByNode, Node checkedNode) {
25         
if (checkedNode.Piece.PieceType == PieceType.CROSS) {
26             GameManager.Instance.Opponent(player).CheckedBy = checkedByNode.Piece;
27             
//checkedPiece.Node.HighlightCheck(); //Experimental
28             
//checkedBy.Node.HighlightCheck(); //Experimental
29             
return true;
30         }
31         
return false;
32     }
33
34     
//Modifies the move if modify = true
35     
//not safe
36     
public static bool IsCheckMove(GCPlayer player, Piece piece, Node tNode, bool modify) {
37         Node oldNode = piece.Node;
38         piece.UpdateNode(tNode);
39         Piece checkedBy = player.CheckedBy;
40         player.ClearCheck();
41         GameManager.Instance.Opponent(player).ComputePieces();
42         
if (player.IsChecked) {
43             piece.UpdateNode(oldNode);
44             player.CheckedBy = checkedBy;
45             
return true;
46         }
47
48         
if (!modify) {
49             piece.UpdateNode(oldNode);
50             player.CheckedBy = checkedBy;
51         }
52         
return false;
53     }
54
55     
public static bool IsGuardedMove(GCPlayer player, Piece piece, Node tNode) {
56         List<Piece> oppPieces = GameManager.Instance.Opponent(player).Pieces;
57         
for (int i = 0; i < oppPieces.Count; i++) {
58             
if (oppPieces[i].IsPossibleMove(tNode)) {
59                 
return true;
60             }
61         }
62
63         
return false;
64     }
65
66
67     
//Modifies the move if modify = true;
68     
public static bool IsCheckEat(GCPlayer player, Piece piece, Node tNode, bool modify) {
69         Node oldNode = piece.Node;
70         Piece tPiece = tNode.Piece;
71         tPiece.UpdateNode(
null);
72         piece.UpdateNode(tNode);
73         Piece checkedBy = player.CheckedBy;
74         player.ClearCheck();
75         GameManager.Instance.Opponent(player).ComputePieces();
76         
if (player.IsChecked) {
77             piece.UpdateNode(oldNode);
78             tPiece.UpdateNode(tNode);
79             player.CheckedBy = checkedBy;
80             
return true;
81         }
82
83         
if (!modify) {
84             piece.UpdateNode(oldNode);
85             tPiece.UpdateNode(tNode);
86             player.CheckedBy = checkedBy;
87         }
88         
return false;
89     }
90
91     
public static bool HasNoMove() {
92         GCPlayer player = GameManager.Instance.CurrentPlayer;
93         List<Piece> pieces = player.Pieces;
94
95         
for (int i = 0; i < pieces.Count; i++) {
96             List<Node> possibleMoves = pieces[i].PossibleMoves;
97             
for (int j = 0; j < possibleMoves.Count; j++) {
98                 Node tNode = possibleMoves[j];
99                 
if (!Rules.IsCheckMove(player, pieces[i], tNode, false)) {
100                     
return false;
101                 }
102             }
103             
104             List<Node> possibleEats = pieces[i].PossibleEats;
105             
for (int j = 0; j < possibleEats.Count; j++) {
106                 Node tNode = possibleEats[j];
107                 
if (!Rules.IsCheckEat(player, pieces[i], tNode, false)) {
108                     
return false;
109                 }
110             }
111         }
112
113         
return true;
114     }
115 }


checkedPiece.Node.HighlightCheck(); Experimental

checkedBy.Node.HighlightCheck(); Experimental

Modifies the move if modify = true

not safe

Modifies the move if modify = true;



Gõ tìm kiếm nhanh...